package com.mycompany.myjobs.repository;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.mycompany.myjobs.model.Anunciante;
import com.mycompany.myjobs.model.Usuario;

@Repository
public class JdbcAnuncianteRepository {
	
	@Autowired
	private DataSource datasource;
	
    Anunciante anunciante=new Anunciante();
	
    //atributo lista de anunciantes
    private ArrayList<Anunciante> anunciantesRegistrados;

    //constructor
    public JdbcAnuncianteRepository()
    {
        anunciantesRegistrados = new ArrayList<Anunciante>();
    }
    
    //get lista de anunciantes
    public ArrayList<Anunciante> getAnunciantesRegistrados(){
        return anunciantesRegistrados;
    }

    //set lista de anunciantes
	public void setAnunciantesRegistrados(ArrayList<Anunciante> anunciantesRegistrados) {
		this.anunciantesRegistrados = anunciantesRegistrados;
	}
	
  public void grabarAnunciante(Usuario usuario, Anunciante anunciante){
			
			String sql = "insert into T_ANUNCIANTE (LOGIN,RUC,PERFIL1,PERFIL2,PERFIL3,PERFIL4) values (?, ?, ?, ?, ?, ?)";
			Connection conn = null;
			PreparedStatement ps = null;
			try {
				
				if (usuario.getLogin()!=null)
				{
				Anunciante RucExistenteAnunciante=	existeRucAnunciante(anunciante.getRuc());
				if (RucExistenteAnunciante.getRuc()!=anunciante.getRuc())
					{
					conn = datasource.getConnection();
					ps = conn.prepareStatement(sql);
					ps.setString(1, anunciante.getLogin());
					ps.setInt(2, anunciante.getRuc());
					ps.setString(3, anunciante.getPerfil1());
					ps.setString(4, anunciante.getPerfil2());
					ps.setString(5, anunciante.getPerfil3());
					ps.setString(6, anunciante.getPerfil4());
					ps.execute();//cuando la sentencia sql no es select
					}
				}
				
		}catch(Exception ex){
			System.out.println("Error grabar Anunciante : " + ex.getMessage());
		}
		
    	closeConecction(null, ps, conn);
	}

	public List<Anunciante> mostrarAnunciantes(){
	    anunciantesRegistrados= new ArrayList <Anunciante>();
	    //TABLA ANUNCIANTES
		String sql = "select LOGIN,RUC,PERFIL1,PERFIL2,PERFIL3,PERFIL4 from T_ANUNCIANTE";
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		//TABLA USUARIOS
		String sql2 = "select NOMBRE,CORREO,TELEFONO,DIRECCION,LOGIN,CONTRASENA from T_USUARIO where LOGIN=?";
		Connection conn2 = null;
		PreparedStatement ps2 = null;
		ResultSet rs2 = null;
		try {
			//TABLA ANUNCIANTES
			conn = datasource.getConnection();
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
					
			while(rs.next()){
				anunciante=new Anunciante();
				anunciante.setLogin(rs.getString("LOGIN"));	
				anunciante.setRuc(rs.getInt("RUC"));
				anunciante.setPerfil1(rs.getString("PERFIL1"));
				anunciante.setPerfil2(rs.getString("PERFIL2"));
				anunciante.setPerfil3(rs.getString("PERFIL3"));
				anunciante.setPerfil4(rs.getString("PERFIL4"));

				//TABLA USUARIOS
				conn2 = datasource.getConnection();
				ps2 = conn2.prepareStatement(sql2);
				ps2.setString(1, anunciante.getLogin());
				rs2 = ps2.executeQuery();
				
					while (rs2.next())
					{
						anunciante.setNombre(rs2.getString("NOMBRE"));
						anunciante.setCorreo(rs2.getString("CORREO"));
						anunciante.setTelefono(rs2.getString("TELEFONO"));
						anunciante.setDireccion(rs2.getString("DIRECCION"));
						anunciante.setLogin(rs2.getString("LOGIN"));
						anunciante.setContrasena(rs2.getString("CONTRASENA"));
					}
				anunciantesRegistrados.add(anunciante);

				
			}

	}catch(Exception ex){
		
		
		System.out.println("Error grabar Postulante : " + ex.getMessage());
	}

	closeConecction(null, ps, conn);
	
	return anunciantesRegistrados;
}

	
    public Anunciante existeRucAnunciante(int ruc) {
    	
	    //TABLA ANUNCIANTES
		String sql = "select LOGIN,RUC from T_ANUNCIANTE where RUC=?";
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			//TABLA ANUNCIANTES
			conn = datasource.getConnection();
			ps = conn.prepareStatement(sql);
			ps.setInt(1, ruc);
			rs = ps.executeQuery();
					
			while(rs.next()){
				anunciante=new Anunciante();
				anunciante.setLogin(rs.getString("LOGIN"));	
				anunciante.setRuc(rs.getInt("RUC"));

			}

			}catch(Exception ex){
				
				
				System.out.println("Error grabar Postulante : " + ex.getMessage());
			}

			closeConecction(null, ps, conn);
			
			return anunciante;

    }
    
	private void closeConecction(ResultSet rs, PreparedStatement ps, Connection conn) {

		if (rs != null) {
			try {
				// Close to prevent database cursor exhaustion
				rs.close();
			} catch (SQLException ex) {
			}
		}
		if (ps != null) {
			try {
				// Close to prevent database cursor exhaustion
				ps.close();
			} catch (SQLException ex) {
			}
		}
		if (conn != null) {
			try {
				// Close to prevent database connection exhaustion
				conn.close();
			} catch (SQLException ex) {
			}
		}

	}	


}
